package com.micro.modual.service;


import com.micro.core.resp.RespJson;
import com.micro.core.resp.RespJsonData;
import com.micro.modual.model.bo.login.BindUserPhoneBO;
import com.micro.modual.model.bo.login.LoginBO;
import com.micro.modual.model.dto.token.TokenDTO;

import javax.servlet.http.HttpServletRequest;

/**
 * <h1>登录服务层接口</h1>
 * @author LevelCoder
 * @version V1.0.0
 * @email LevelCoder@126.com
 * @date 2020/5/1
 */
public interface LoginService {

    /**
     * <h2>登陆操作 获取token信息</h2>
     * @param loginBO {@link LoginBO} 登录请求对象
     * @param request  {@link HttpServletRequest} 用于在生成token时候获取请求头信息,区分请求客户端
     * @return {@link TokenDTO}  登录请求返回对象
     * @throws Exception
     */
    RespJsonData<TokenDTO> createAuthenticationToken(LoginBO loginBO, HttpServletRequest request) throws Exception;

    /**
     * <h2>刷新token</h2>
     * @param customerCode  客户编号
     * @param request       {@link HttpServletRequest} 用于在生成token时候获取请求头信息,区分请求客户端
     * @return  {@link TokenDTO}  登录请求返回对象
     * @throws Exception
     */
    RespJsonData<TokenDTO> refreshToken(String customerCode, HttpServletRequest request) throws Exception;

    /**
     * <h2>账户退出</h2>
     * @return {@link RespJson} 返回结果基础类
     */
    RespJson logout(HttpServletRequest request);

    /**
     * <h2>第三方登录,绑定手机号</h2>
     * @param bindUserPhoneBO {@link BindUserPhoneBO} 第三方登录绑定用户手机号
     * @return {@link TokenDTO}  登录请求返回对象
     */
    RespJsonData<TokenDTO> modifyOpenLoginBindUserPhone(BindUserPhoneBO bindUserPhoneBO);

    /**
     * <h2>校验token有效性</h2>
     * @param token 请求token
     * @return
     */
    RespJson validataRequestToken(String token) throws Exception;
}
